package com.woniuxy.dao;

import com.woniuxy.entity.Test;
import com.woniuxy.entity.TestOptions;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * (Test)表数据库访问层
 *
 * @author zjx
 * @since 2021-05-14 19:39:02
 */
@Mapper
public interface TestDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Test queryById(Integer id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<Test> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param test 实例对象
     * @return 对象列表
     */
    List<Test> queryAll(Test test);

    /**
     * 新增数据
     *
     * @param test 实例对象
     * @return 影响行数
     */
    int insert(Test test);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<Test> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<Test> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<Test> 实例对象列表
     * @return 影响行数
     */
    int insertOrUpdateBatch(@Param("entities") List<Test> entities);

    /**
     * 修改数据
     *
     * @param test 实例对象
     * @return 影响行数
     */
    int update(Test test);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

    /**
     * Description : 通过集合查询试题页面的所有信息
     * ChangeLog : 1. 创建 (2021/5/17 17:25 [zjx]);
     * @param map 包含各种信息
     * @return null
    */
    List<Map<String,String>> queryAlls(Map<String, String> map);

    List<Integer> queryIdByTypeBankLabelLimit(String testBankName, String testLabel, int singleNumber,String type);

    /**
     *
     * @param list 试题id集合
     * @return 试题对象集合
     */
    List<Test> queryBodyLabelById(List<Integer> list);

    /**
     *
     * @params  String 试题库名,试题标签,试题类型,试题数量,试题名称
     * @return 试题Id集合
     */
    List<Integer> queryTestsByTypeLabelBodyBank(String testBankName, String testLabel, String testBody, String type);

    List<Test> queryDetailByTypePaper(Map<String,String> map);

    List<TestOptions> queryOptionById(int id);

    /**
     * Description : 除去题库id外所有试题信息
     * ChangeLog : 1. 创建 (2021/5/22 12:02 [zjx]);
     * @param map 题库id 模糊查询试题标签和试题名称
     * @return null
     */
    Map<String, Object> queryByTestBankId(Map<String, Object> map);
}

